package com.neusoft.ch6;

import com.neusoft.ch6.demo.Monitor;
import com.neusoft.ch6.demo.Monitor2;

/*
 * 课堂笔记：
 * 6.构造方法
 *   构造方法是类在使用new创建实力对象时所调用的方法；
 *   语法：
 *       访问控制修饰符  类名(形参列表){
 *          //构造方法体
 *       }
 *   注意：
 *      (1)访问控制修饰符一般使用public，如果使用private则外部类不能调用该构造方法创建实力对象；
 *      (2)构造方法的名字就是类名；
 *      (3)如果不写自定义构造方法，jvm会自动提供一个不带参数的默认的构造方法；      
 *      (4)如果写了自定义的构造方法，则jvm不再提供默认的构造方法，如果还要使用默认的构造方法，则需要手动写出来；
 *         如果写了自定义的构造方法，则默认构造方法也要手写；不再自动提供；
 *      (5)使用new创建该类的实例对象时，调用的是构造方法；
 *         类的new操作调用的是构造方法   
 * 7.继承
 *   继承：是子类从父类中获取一些可以继承到的属性和行为。
 *   目的：代码复用；
 *   解析：
 *       java中使用extends关键字实现继承；
 *       java中是单继承：一个子类只有一个直接父类；（extends后面只能有一个类名）
 *       java中所有的类都是从Object类中继承来的。（Object类是java中所有类的直接或间接父类）
 *       java中创建的类一定继承了一个类（java中创建的类都直接或间接继承自Object类）
 * 7.1继承的约束
 *   通过访问控制符来约束父子类之间的继承关系；
 *   被访问控制符修饰的内容有：属性、行为。
 *   
 *   下标表明了那些属性和行为可以在什么范围内访问，以及那些属性和行为可以被子类继承：
 *   
 *      访问控制修饰符                                 访问范围                                                 子类继承关系
 *      
 *         public               所有的类                                                     可以继承
 *         
 *         protected           同包的类和所有的子类                                  可以继承     
 *                             （包括不同包的子类）
 *                             
 *         默认的（什么也不写）                同包的类或同包的子类                               同包的子类可以继承
 *         
 *         private               当前类自身可以访问                                不可以继承 
 *   
 *   上表表明，在一个类中，该类的属性和行为能在什么范围进行访问，已经该类的属性和行为能被什么样的子类继承；
 * 7.2继承中构造方法
 *   构造方法不可以继承；
 *   在继承中，如果有父子类关系，则在子类进行new创建时，
 *   采用递归的方式进行调用(先调用父类的构造方法，在调用子类的构造方法)；
 *   注意：
 *       如果子类需要调用默认的构造方法，则父类必须支持使用默认的构造方法；
 *       原因：是子类的默认的构造方法会自动调用父类的默认的构造方法（无论是否使用了super()调用）
 *       
 *            如果子类没有使用super(参数列表)的形式显式调用父类的构造方法，则jvm会自动调用父类默认的构造方法；
 * 
 * 8.this和super关键字
 *   this关键字：
 *       this指代当前实例对象；用于区分同名的局部变量和成员变量，this引出同名的成员变量；
 *       通过this(参数列表)的形式可以调用本类的构造方法；
 *          构造方法只能通过new或this(参数类表)的形式进行调用，外部无法直接调用构造方法；
 *          构造方法之间可以通过 this(参数列表)的形式相互调用，但是this(参数列表)语句只能写在第一行；     
 *   super关键字：
 *       super指代父类的实例对象；用于区分子类和父类同名的属性和行为方法（多态的内容，后面阐述）；
 *       通过super(参数类表)的形式调用父类的构造方法；也只能写在第一行；
 *   
 *   
 *   
 */

public class TestCh6 {

	public static void main(String[] args) {
		test01();
	}

	/**
	 * 继承实例
	 */
	private static void test01() {
		// 创建一个Monitor类的实例对象
		Monitor2 monitor0 = new Monitor2();
		monitor0.setStuName("小明");
		// 调用父类Student的havedinner行为
		monitor0.haveDinner();
	}
}
